#include <iostream>
#include <vector>
#include <queue>
#include <algorithm> // sort

using namespace std;

struct cmp
{
    bool operator()(const int& a, const int& b)
    {
        return a < b;
    }
};
class SolutionOne {
public:
    int scheduleCourse(vector<vector<int>>& courses) {
        int time_sum = 0;
        // <queue>队列
        priority_queue<int, vector<int>, less<int>> que;
        // <algorithm>向量排序
        sort(courses.begin(), courses.end(), [](vector<int>& a, vector<int>& b){
            return a[1] < b[1];
        });
        // 遍历向量
        for(auto i : courses)
        {
            // 总耗时大于规定的时间：超出时间的话
            if(time_sum + i[0] > i[1])
            {
                // 队列不空，队列最后一个大于课程的时间的话
                if(!que.empty() && que.top() > i[0])
                {
                    // 总耗时减去队列尾部
                    time_sum -= que.top();
                    // 出队列：那前面的两个que.top()呢？
                    que.pop();
                    // 总耗时加上每门课修读的时间
                    time_sum += i[0];
                    // 队列：添加每门课修读的时间
                    que.push(i[0]);
                }
            }
            // 总耗时<=规定的时间
            else
            {
                // 总耗时加
                time_sum += i[0];
                // 队列加
                que.push(i[0]);
            }
        }
        // 返回队列的大小
        return que.size();
    }
};

// 能贪就贪：优先队列？？？？